package com.iutr.shared.model;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import lombok.Getter;
import lombok.ToString;

import java.util.HashMap;
import java.util.Map;

/**
 * service接口返回的模型
 *
 * @author lss
 * @date 2020/8/27, 周四
 */

@Getter
@ToString(callSuper = true)
public class ServiceResult<T> extends Result<T> {

    /**
     * 保存调用外部接口的响应
     */
    private Map<String, String> outerResult;
    private static final int DEFAULT_MAP_SIZE = 8;

    /**
     * 新增外部接口返回结果
     *
     * @param key    外部接口KEY
     * @param result 接口返回结果
     */
    public void addOuterResult(String key, String result) {
        if (!StrUtil.isAllNotBlank(key, result)) {
            return;
        }
        checkMap();
        outerResult.put(key, result);
    }

    /**
     * 新增外部接口返回结果
     *
     * @param outerResult key-value，接口key和返回结果value
     */
    public void addOuterResult(Map<String, String> outerResult) {
        if (CollUtil.isEmpty(outerResult)) {
            return;
        }
        checkMap();
        this.outerResult.putAll(outerResult);
    }

    private void checkMap() {
        if (outerResult == null) {
            outerResult = new HashMap<>(DEFAULT_MAP_SIZE);
        }
    }

    /**
     * 将source中的接口结果合并到target中
     *
     * @param source 原结果
     * @param target 需要合并原结果的模型
     */
    public static void mergeOuterResult(ServiceResult<?> target, ServiceResult<?> source) {
        if (source != null && target != null) {
            target.addOuterResult(source.getOuterResult());
        }
    }
}

